<!DOCTYPE html>
<html lang="en">

  <head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
  </head>

  <body>
    <script>
      /*
            apply
                Function.prototype.apply

                作用
                    1. 修改this
                    2. 调用函数
                用法：
                    函数.apply(函数的新的this,[函数所需的参数...])
        */

      function fn(a, b) {
        console.log(this);
        console.log(a, b);
        return a + b
      }
      //fn.apply(null,[30,30])
      // fn(10, 20) //window 10 ,20

      // //证明 apply能修改this， 也能调用函数
      // fn.apply({
      //   name: '狗蛋'
      // }, [100, 200]) //{name:'狗蛋'} 100,200


      //2.可以使用借用来实现快速求数组的最大最小值
      // let arr = [1, 5, 8, 7, 10]
      // let m = Math.max.apply(null, arr)
      // console.log(m); //10

      // console.log(Math.max(...arr)); //10


      // // 还可以用在 借用构造函数实现继承
      // function Person(name, age, gender) {
      //   this.name = name
      //   this.age = age
      //   this.gender = gender
      // }

      // function Student(name, age, gender, number) {
      //   Person.apply(this, arguments)
      //   this.number = number
      // }
      // let s1 = new Student('小明', 16, '男', 'A001')
      // console.log(s1);
    </script>
  </body>

</html>